#pragma once 

#include<iostream>
#include<cstdlib>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<signal.h>
#include<unistd.h>

const char * root="/";
const char* dev_null="/dev/null";

void Daemon(bool ischdir,bool isclose)
{
    //1.忽略信号
    signal(SIGPIPE ,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);

    //2.自成组
    if(fork()>0)
        exit(0);
    
    //3.新的会话
    setsid();

    //4.更改路径
    if(ischdir)
    {
        chdir(root);
    }

    //关闭文件描述符
    if(isclose)
    {
        close(0);
        close(1);
        close(2);
    }
    else{
         int fd=open(dev_null,O_RDWR);
         if(fd>0)
         {
            dup2(fd,0);
            dup2(fd,1);
            dup2(fd,2);
         }
    }
}
